package cn.demoncat.util.web;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.reflect.MethodSignature;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

/**
 * AOP工具
 *
 * @author 延晓磊
 * @since 2021年11月02日
 */
public class AopUtil {

    /**
     * 获取AOP方法
     *
     * @param point    AOP切面参数
     * @return
     */
    public static Method getMethod(JoinPoint point){
        // 获取方法签名对象
        MethodSignature signature = (MethodSignature) point.getSignature();
        // 获取方法对象
        return signature.getMethod();
    }

    /**
     * 获取AOP方法的返回值类型
     *
     * @param point    AOP切面参数
     * @return
     */
    public static Class<?> getMethodReturnType(JoinPoint point){
        return getMethod(point).getReturnType();
    }

    /**
     * 获取AOP方法的注解
     *
     * @param point	AOP切面参数
     * @param clazz	注解类型
     * @param <T>
     * @return
     */
    public static <T extends Annotation>T getMethodAnnotation(JoinPoint point, Class<T> clazz){
        return getMethod(point).getAnnotation(clazz);
    }
}
